Last updated: 2020-05-07

Checks: 6 1

Knit directory: tracking-app/

This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


The R Markdown file has unstaged changes. To know which version of the R Markdown file created these results, you’ll want to first commit it to the Git repo. If you’re still working on the analysis, you can ignore this warning. When you’re finished, you can run wflow_publish to commit the R Markdown file and build the HTML.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20200329) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version 8a35dfc. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Untracked files:
    Untracked:  .Rhistory
    Untracked:  data/Covid19.Switzerland.RData

Unstaged changes:
    Modified:   .DS_Store
    Modified:   analysis/.Rhistory
    Modified:   analysis/GERcov1.Rmd
    Modified:   analysis/SWISScovWave1.Rmd

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/SWISScovWave1.Rmd) and HTML (public/SWISScovWave1.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd 8a35dfc Lorenz-Spreen 2020-05-07 corrected some descriptions in the swiss survey
html 8a35dfc Lorenz-Spreen 2020-05-07 corrected some descriptions in the swiss survey
html d20e35a Lorenz-Spreen 2020-05-06 added some labels
Rmd e2e0087 Lorenz-Spreen 2020-05-06 added details to swiss description
html e2e0087 Lorenz-Spreen 2020-05-06 added details to swiss description
Rmd 691dacd Lorenz-Spreen 2020-05-05 added switzerland
html 691dacd Lorenz-Spreen 2020-05-05 added switzerland

1 Status of this report

These results represent a snapshot of an ongoing analysis and have not been peer-reviewed. They are for information but not for citation or to inform policy (as yet). Please report comments or bugs to or leave a comment on the relevant post on our subreddit.

Last update: Thu May 7 13:02:26 2020

These results are for Switzerland only. For other countries, return Home and choose another country.

2 Switzerland Wave 1

Participants: Participants were recruited from the German speaking population of Switzerland through Respondi, using their quota for age brackets and sex (separately, not crossed) to approximate a representative sample on these 2 variables.

Preregistration: Preregistration of the study can be found here

2.1 Basic exploration

Note that the R code for this analysis can be hidden or made visible by clicking the black toggles next to each segment.

2.2 Clean up data

  • Remove observations that are returned as not having finished.
  • Remove observations from participants who answered the fact check about the scenario incorrectly.
  • Remove lots of unnecessary variables to create a lean dataset.
  • Reverse score item fm_limited so it points towards increasing libertarianism, just like the other two.
rm(list=ls())
library(lattice)
library(hexbin) #helps with large data sets in lattic scatterplot matrix
library(stargazer)
library(tidyverse)
library(lme4)
library(gridExtra)
library(stringr)
library(Hmisc)
library(reshape2)
library(psych)
library(scales)
library(summarytools) #contains descr()
library(workflowr)
library(readxl)
library(vioplot)
library(expss)  #for pretty looking tables
library(jtools) #for pretty looking regression output
library(kableExtra) #more prettification of regression output via jtools --> knitr
library(broom.mixed) #tidying methods for mixed models, required for pretty looking regression output

revscore <- function (x,mm) {  #this reverse scores a scale for items of reversed polarity
  return ((mm+1)-x)            
}

#define working directories
inputdir <- "data"
#remove unfinished, failed attention check, wrongly directed
load("data/Covid19.Switzerland.RData")
#covfin  <- covdata %>% filter(Finished==1) %>%  filter(attention_check == 1) %>% filter(!(is_accceptable1==""&app_uptake1=="")) %>% filter(!(is_acceptable2==""&app_uptake2=="")) %>% select(-c(starts_with("Recipient"),starts_with("Q_"),Status,Finished,Progress,DistributionChannel,UserLanguage,ResponseId))

#numeric data types: remaining problem with mutliple choice responses for information source
#covfin[5:51] <- sapply(covfin[5:51], function(x) {
#    if(is.factor(x)) as.numeric(as.character(x)) else x
#})
covfin  <- covdata %>% filter(Finished==1) %>%  filter(attention_check == 1) %>% filter(!(is_accceptable1==""&app_uptake1=="")) %>%   filter(!(is_acceptable2==""&app_uptake2=="")) %>% select(-c(starts_with("Recipient"),starts_with("Q_"),Status,Finished,Progress,DistributionChannel,UserLanguage,ResponseId))

covfin <- covfin %>% mutate(fm_limited=revscore(fm_limited,7))
covfin$id <- 1:nrow(covfin)

#compute composite score for worldview
covfin$Worldview <- covfin %>% select(c(fm_unres_best, fm_limited, lim_gov)) %>% apply(.,1, mean, na.rm=TRUE)

#do some cleaning up of silly variable names
covfin <- covfin %>% rename(Age = age_4)

#create good labels for variables (from expss package)
covfin <- apply_labels(covfin,
                       gender = "Gender",
                       gender = c("Male" = 1, "Female" = 2, "Other" = 3),
                       education = "Education",
                       #education = c("Hauptschule" = 1, "Realschule" = 2, "Abitur" = 3, "Universitaet" = 5, "None" = 4),
                       COVID_positive_1 = "I was tested positive",
                       COVID_positive_1 = c("Yes" = 1, "No" = 0),
                       COVID_positive_2 = "Tested pos someone I know",
                       COVID_positive_2 = c("Yes" = 1, "No" = 0),
                       scenario_type = "Type of policy scenario",
                       COVID_lost_job = "I lost my job",
                       COVID_lost_job = c("Yes" = 1, "No" = 0))
                       
covfin$COVID_info_source <- gsub("1", "Newspaper (printed or online)", covfin$COVID_info_source)
covfin$COVID_info_source <- gsub("2", "Social media", covfin$COVID_info_source)
covfin$COVID_info_source <- gsub("3", "Friends/family", covfin$COVID_info_source)
covfin$COVID_info_source <- gsub("4", "Radio", covfin$COVID_info_source)
covfin$COVID_info_source <- gsub("5", "Television", covfin$COVID_info_source)
covfin$COVID_info_source <- gsub("6", "Other", covfin$COVID_info_source)
covfin <- apply_labels(covfin, COVID_info_source= "Information source")

2.3 Demographics

Number of retained participants: 1015.

Gender, education, and age:

cro_tpct(covfin$gender) %>% set_caption("Gender identification: Percentages")
Gender identification: Percentages
 #Total 
 Gender 
   Male 
   Female 
   Other 
   Female  57.4
   Male  42.4
   Other  0.2
   #Total cases  1015
cro_tpct(covfin$education) %>% set_caption("Level of education: Percentages")
Level of education: Percentages
 #Total 
 Education 
   Sek I  13.3
   Sek II  59.0
   University  27.8
   None 
   #Total cases  994
descr(covfin$Age)
Descriptive Statistics  
covfin$Age  
N: 1015  

                        Age
----------------- ---------
             Mean     47.94
          Std.Dev     16.52
              Min     18.00
               Q1     33.00
           Median     48.00
               Q3     62.00
              Max     90.00
              MAD     20.76
              IQR     28.00
               CV      0.34
         Skewness      0.07
      SE.Skewness      0.08
         Kurtosis     -1.07
          N.Valid   1015.00
        Pct.Valid    100.00
hist(covfin$Age, xlab="Age",main="",las=1)

Version Author Date
691dacd Lorenz-Spreen 2020-05-05

3 Comparison between scenarios

3.1 Acceptability of policy

Not all items are entirely commensurate between scenarios. We begin with a graphical summary. The figure below shows people’s confidence that each of the scenarios would:

  • reduce their likelihood of contracting COVID-19
  • allow them to resume their normal lives more rapidly
  • reduce spread of COVID-19 in the community.
#plot violins side by side
plotvn <- c("Reduce contracting","Resume normal","Reduce spread")

vioplot(select(covfin,c(participant_benefit,Q328,reduce_spread_mild)), col = "yellow", plotCentre = "line", side = "left",las=1,names=plotvn,ylim=c(1,7.5))
vioplot(select(covfin,c(Q284,Q330,reduce_spread_severe)), col = "red", plotCentre = "line", side = "right", add = T )
title(xlab="Variable",ylab="Confidence")
legend(3,7.6, fill = c("yellow", "red"), legend = c("Mild", "Severe"), title = "Type of scenario")

Version Author Date
691dacd Lorenz-Spreen 2020-05-05

Basic acceptability of each scenario, probed by a single item immediately after reading the scenario. The table shows percentages. For the mild scenario, the question refers to whether participant would download the app. For the severe scenario, the question refers to acceptability of the tracking mandated by government.

#use gather and drop
accept1 <- covfin %>% select(c(app_uptake1,is_accceptable1)) %>% pivot_longer(c(app_uptake1,is_accceptable1), names_to = "key", values_to = "value") 
covfin$accept1 <- (accept1 %>% drop_na())$value
#we do not drop NAs for the pivoted data frame to allow correct merging for quasi interval score below with the conditional responses
accept1 <- apply_labels(accept1,
                       value = "Acceptability of policy",
                       value = c("Yes" = 1, "No" = 0),
                       key = "Type of scenario",
                       key = c("Mild" ="app_uptake1", "Severe" = "is_accceptable1"))

cro_tpct(accept1$value,row_vars=accept1$key) #presence of NAs makes no difference here
 #Total 
 Type of scenario 
   Mild   Acceptability of policy   No  33.5
    Yes  66.5
    #Total cases  493
   Severe   Acceptability of policy   No  45.0
    Yes  55.0
    #Total cases  522
chisq.test(unlabel(accept1$value),unlabel(accept1$key),correct=TRUE) 

    Pearson's Chi-squared test with Yates' continuity correction

data:  unlabel(accept1$value) and unlabel(accept1$key)
X-squared = 13.687, df = 1, p-value = 0.000216

The difference between acceptability of scenarios is significant by a \(\chi^2\) test on the contingency table.

Repeated probing of basic acceptability of each scenario after multiple questions about the scenario have been answered. The table shows percentages. For the mild scenario, the question refers to whether participant would download the app. For the severe scenario, the question refers to acceptability of the tracking mandated by government.

accept2 <- covfin %>% select(c(app_uptake2,is_acceptable2)) %>% pivot_longer(c(app_uptake2,is_acceptable2), names_to = "key", values_to = "value")
covfin$accept2 <- (accept2 %>% drop_na() )$value
accept2 <- apply_labels(accept2,
                        value = "Acceptability of policy",
                        value = c("Yes" = 1, "No" = 0),
                        key = "Type of scenario",
                        key = c("Mild" ="app_uptake2_mild", "Severe" = "is_acceptable2_sev"))
cro_tpct(accept2$value,row_vars=accept2$key)
 #Total 
 Type of scenario 
   Mild   Acceptability of policy   No 
    Yes 
    #Total cases 
   Severe   Acceptability of policy   No 
    Yes 
    #Total cases 
   app_uptake2   Acceptability of policy   No  35.9
    Yes  64.1
    #Total cases  493
   is_acceptable2   Acceptability of policy   No  46.6
    Yes  53.4
    #Total cases  522
chisq.test(unlabel(accept2$value),unlabel(accept2$key),correct=TRUE)

    Pearson's Chi-squared test with Yates' continuity correction

data:  unlabel(accept2$value) and unlabel(accept2$key)
X-squared = 11.418, df = 1, p-value = 0.0007272

The difference between acceptability of scenarios is significant by a \(\chi^2\) test, and overall acceptability of both scenarios has been reduced slightly compared to first set of questions.

Those people who found the scenario unacceptable were asked follow-up questions. For both scenarios, people were asked if their decision would change if the government was required to delete the data and cease tracking after 6 months. Responses to this sunset question (percentages) were as follows:

#use gather and drop
sunset <- covfin %>% select(c(sunset_app,sunset)) %>% pivot_longer(c(sunset_app,sunset), names_to = "key", values_to = "value") 
sunset <- apply_labels(sunset,
                       value = "Acceptability with sunset",
                       value = c("Yes" = 1, "No" = 0),
                       key = "Type of scenario",
                       key = c("Mild" ="sunset_app", "Severe" = "sunset"))
cro_tpct(sunset$value,row_vars=sunset$key) 
 #Total 
 Type of scenario 
   Mild   Acceptability with sunset   No  68.4
    Yes  31.6
    #Total cases  177
   Severe   Acceptability with sunset   No  71.2
    Yes  28.8
    #Total cases  243
chisq.test(unlabel(sunset$value),unlabel(sunset$key),correct=TRUE) 

    Pearson's Chi-squared test with Yates' continuity correction

data:  unlabel(sunset$value) and unlabel(sunset$key)
X-squared = 0.26784, df = 1, p-value = 0.6048

The majority of people persisted in their opposition to the policy even with a sunset clause, and this did not differ between scenarios.

In addition, people who found the mild scenario unacceptable where asked a further followup question, namely if they would change their decision if data was stored only on the user’s smartphone (not government servers) and people were given the option to provide the data if they tested positive.

covfin <- apply_labels(covfin,
                       data_local = "Acceptability with local storage",
                       data_local = c("Yes" = 1, "No" = 0))
cro_tpct(covfin$data_local) 
 #Total 
 Acceptability with local storage 
   No  48.6
   Yes  51.4
   #Total cases  177

Slightly more than half of the people who rejected the policy initially were prepared to accept it with local data storage.

In addition, people who found the severe scenario unacceptable where asked a further followup question, namely if they would change their decision if there was an option to opt out of data collection.

covfin <- apply_labels(covfin,
                       opt_out = "Acceptability with opt out",
                       opt_out = c("Yes" = 1, "No" = 0))
cro_tpct(covfin$opt_out) 
 #Total 
 Acceptability with opt out 
   No  49.4
   Yes  50.6
   #Total cases  243

Slightly more than half the people who rejected the policy initially were prepared to accept it with an opt out clause.

3.2 Assessment of risk of scenarios, trust in government and data security

The next graph shows responses to the following items (abridged from survey):

  1. How easy is it for people to decline participation in the proposed project?
  2. To what extent is the Government only collecting the data necessary?
  3. How sensitive is the data being collected in the proposed project?
  4. How serious is the risk of harm that could arise from the proposed project?
  5. How much do you trust the Government to use the tracking data only to deal with the COVID-19 pandemic?
  6. How much do you trust the Government to be able to ensure the privacy of each individual?
  7. How secure is the data that would be collected for the proposed project?
  8. To what extent do people have ongoing control of their data?
#plot violins side by side
#x11(width=10,height=6)
plotvn <- c("Decline","Necessary","Sensitive","Risk","Trust use","Trust privacy","Secure", "Control")
#select(filter(covfin,scenario_type=="mild"),c(decline_participate:ongoing_control))
vioplot(select(filter(covfin,scenario_type=="mild"),c(decline_participate:ongoing_control)), col = "yellow", plotCentre = "line", side = "left",las=1,names=plotvn,ylim=c(1,7.5))
vioplot(select(filter(covfin,scenario_type=="severe"),c(decline_participate:ongoing_control)), col = "red", plotCentre = "line", side = "right", add = T )
title(xlab="Variable",ylab="Response")
legend(3,7.6, fill = c("yellow", "red"), legend = c("Mild", "Severe"), title = "Type of scenario")

Version Author Date
691dacd Lorenz-Spreen 2020-05-05

4 Role of worldviews

4.1 Worldview and risk perception

We relate a composite of the 3 worldview items to the composite of the 4 items probing perceived risk from COVID. Worldview is scored such that greater values reflect greater libertarianism.

p <- ggplot(covfin, aes(Worldview, COVIDrisk)) +
            geom_point(size=1.5,shape = 21,fill="red",
               position=position_jitter(width=0.15, height=0.15)) +
            geom_smooth() +
    theme(plot.title = element_text(size = 18),
          panel.background = element_rect(fill = "white", colour = "grey50"),
          text = element_text(size=14)) +
    xlim(0.8,7.2) + ylim(0.8,5.2) +
    labs(x="Worldview (libertarianism)", y="Perceived COVID risk") 
print(p)              
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 1 rows containing non-finite values (stat_smooth).
Warning: Removed 1 rows containing missing values (geom_point).

Version Author Date
691dacd Lorenz-Spreen 2020-05-05
pcor <- cor.test (covfin$Worldview,covfin$COVIDrisk, use="pairwise.complete.obs") %>% print()

    Pearson's product-moment correlation

data:  covfin$Worldview and covfin$COVIDrisk
t = -1.7558, df = 1012, p-value = 0.07943
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.116277722  0.006476656
sample estimates:
        cor 
-0.05510877 

There is no correlation between worldviews and risk perception.

4.2 Worldviews and trust

We relate the composite of the 3 worldview items to the composite of the two trust-in-government items (which correlate 0.807).

p <- ggplot(covfin, aes(Worldview, govtrust)) +
            geom_point(size=1.5,shape = 21,fill="red",
               position=position_jitter(width=0.15, height=0.15)) +
            geom_smooth() +
    theme(plot.title = element_text(size = 18),
          panel.background = element_rect(fill = "white", colour = "grey50"),
          text = element_text(size=14)) +
    xlim(0.8,7.2) + ylim(0.8,5.2) +
    labs(x="Worldview (libertarianism)", y="Trust in government") 
print(p)              
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 140 rows containing non-finite values (stat_smooth).
Warning: Removed 140 rows containing missing values (geom_point).

Version Author Date
691dacd Lorenz-Spreen 2020-05-05
pcor <- cor.test (covfin$Worldview,covfin$govtrust, use="pairwise.complete.obs") %>% print()

    Pearson's product-moment correlation

data:  covfin$Worldview and covfin$govtrust
t = -7.8404, df = 1012, p-value = 1.134e-14
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2964967 -0.1803955
sample estimates:
       cor 
-0.2393013 

The pattern is suggestive of the possibility that trust in government is less at the liberitarian extreme of the ideological scale.

5 Logistic modeling

We now try to model acceptability of the scenarios from some of the other variables using logistic regression. The models were initially developed by Dan Little, imported and extended by Stephan Lewandowsky on 7 April 2020.

5.1 Mixed-effects modeling

The first model is a mixed-effects model. This includes a random intercept (i.e., a different intercept for each participant). The model used the various trust variables and other questions about the policies being proposed.

lrmod1 <- glmer(accept1 ~ decline_participate + proportionality + sensitivity + risk_of_harm + trust_intentions + trust_respectprivacy  + scenario_type + (1 | id), 
                data = covfin, family = binomial)
summ(lrmod1,digits=3)
Warning in summ.merMod(lrmod1, digits = 3): Could not calculate r-squared. Try removing missing data
before fitting the model.
Observations 1015
Dependent variable accept1
Type Mixed effects generalized linear model
Family binomial
Link logit
AIC 912.537
BIC 956.841
Fixed Effects
Est. S.E. z val.
(Intercept) -2.116 0.599 -3.531
decline_participate 0.034 0.069 0.493
proportionality 0.473 0.090 5.235
sensitivity -0.142 0.082 -1.736
risk_of_harm -0.260 0.083 -3.150
trust_intentions 0.323 0.092 3.502
trust_respectprivacy 0.323 0.096 3.363
scenario_typesevere -0.116 0.229 -0.506
Random Effects
Group Parameter Std. Dev.
id (Intercept) 0.382
Grouping Variables
Group # groups ICC
id 1015 0.042
#try a different optimizer to see if singularity persists
ss <- getME(lrmod1,c("theta","fixef"))
lrmod1a <- update(lrmod1,start=ss,control=glmerControl(optimizer="bobyqa",   optCtrl=list(maxfun=2e5))) 
summ(lrmod1a,digits=3)
Warning in summ.merMod(lrmod1a, digits = 3): Could not calculate r-squared. Try removing missing data
before fitting the model.
Observations 1015
Dependent variable accept1
Type Mixed effects generalized linear model
Family binomial
Link logit
AIC 912.537
BIC 956.841
Fixed Effects
Est. S.E. z val.
(Intercept) -2.116 0.599 -3.531
decline_participate 0.034 0.069 0.493
proportionality 0.472 0.090 5.235
sensitivity -0.141 0.082 -1.736
risk_of_harm -0.260 0.083 -3.150
trust_intentions 0.323 0.092 3.502
trust_respectprivacy 0.323 0.096 3.363
scenario_typesevere -0.116 0.229 -0.506
Random Effects
Group Parameter Std. Dev.
id (Intercept) 0.382
Grouping Variables
Group # groups ICC
id 1015 0.042
#use composite score for trust
covfin$trust <- (covfin$proportionality + covfin$trust_intentions + covfin$trust_respectprivacy)/3
lrmod1b <- glmer(accept1 ~ decline_participate +  sensitivity + risk_of_harm + trust  + scenario_type + (1 | id), 
                data = covfin, family = binomial)
summ(lrmod1b,digits=3)
Warning in summ.merMod(lrmod1b, digits = 3): Could not calculate r-squared. Try removing missing data
before fitting the model.
Observations 1015
Dependent variable accept1
Type Mixed effects generalized linear model
Family binomial
Link logit
AIC 910.758
BIC 945.216
Fixed Effects
Est. S.E. z val.
(Intercept) -2.099 0.595 -3.528
decline_participate 0.035 0.069 0.510
sensitivity -0.127 0.080 -1.583
risk_of_harm -0.260 0.082 -3.150
trust 1.105 0.143 7.756
scenario_typesevere -0.106 0.228 -0.466
Random Effects
Group Parameter Std. Dev.
id (Intercept) 0.357
Grouping Variables
Group # groups ICC
id 1015 0.037

It is clear that the singularity is caused by the near-zero random-effects variance and seems quite resistant to a few attempts to get around it. The remaining models therefore drop the random effect.

5.2 Ordinary logistic regression

Acceptance as a function of trust in government and perceived consequences of policies. The two models are for the two acceptance/uptake questions: The first model is for the first question early on in the piece, and the second model is for the question provided later on, after all the various questions about trust have been answered.

mod1 <- glm(accept1 ~ decline_participate + proportionality + sensitivity + risk_of_harm + trust_intentions + trust_respectprivacy  + scenario_type, 
              data = covfin, family = binomial)
summ(mod1,digits=3)
Observations 1015
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(7) 466.589
Pseudo-R² (Cragg-Uhler) 0.499
Pseudo-R² (McFadden) 0.343
AIC 910.611
BIC 949.993
Est. S.E. z val. p
(Intercept) -2.049 0.527 -3.886 0.000
decline_participate 0.033 0.067 0.487 0.627
proportionality 0.459 0.073 6.311 0.000
sensitivity -0.138 0.079 -1.757 0.079
risk_of_harm -0.255 0.078 -3.275 0.001
trust_intentions 0.315 0.084 3.747 0.000
trust_respectprivacy 0.314 0.087 3.592 0.000
scenario_typesevere -0.113 0.223 -0.507 0.612
Standard errors: MLE
summ(mod1,digits=3,scale=TRUE)
Observations 1015
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(7) 466.589
Pseudo-R² (Cragg-Uhler) 0.499
Pseudo-R² (McFadden) 0.343
AIC 910.611
BIC 949.993
Est. S.E. z val. p
(Intercept) 0.692 0.143 4.835 0.000
decline_participate 0.056 0.116 0.487 0.627
proportionality 0.715 0.113 6.311 0.000
sensitivity -0.186 0.106 -1.757 0.079
risk_of_harm -0.367 0.112 -3.275 0.001
trust_intentions 0.511 0.136 3.747 0.000
trust_respectprivacy 0.489 0.136 3.592 0.000
scenario_type -0.113 0.223 -0.507 0.612
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
mod2 <- glm(accept2 ~ decline_participate + proportionality + sensitivity + risk_of_harm + trust_intentions + trust_respectprivacy  +  scenario_type, 
       data = covfin, family = binomial)
summ(mod2,digits=3)
Observations 1015
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(7) 525.166
Pseudo-R² (Cragg-Uhler) 0.544
Pseudo-R² (McFadden) 0.381
AIC 867.599
BIC 906.980
Est. S.E. z val. p
(Intercept) -2.067 0.537 -3.847 0.000
decline_participate -0.037 0.069 -0.534 0.593
proportionality 0.448 0.076 5.914 0.000
sensitivity -0.181 0.081 -2.238 0.025
risk_of_harm -0.298 0.080 -3.735 0.000
trust_intentions 0.349 0.086 4.066 0.000
trust_respectprivacy 0.393 0.089 4.418 0.000
scenario_typesevere 0.169 0.230 0.736 0.462
Standard errors: MLE
summ(mod2,digits=3,scale=TRUE)
Observations 1015
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(7) 525.166
Pseudo-R² (Cragg-Uhler) 0.544
Pseudo-R² (McFadden) 0.381
AIC 867.599
BIC 906.980
Est. S.E. z val. p
(Intercept) 0.441 0.145 3.030 0.002
decline_participate -0.064 0.119 -0.534 0.593
proportionality 0.698 0.118 5.914 0.000
sensitivity -0.243 0.109 -2.238 0.025
risk_of_harm -0.429 0.115 -3.735 0.000
trust_intentions 0.565 0.139 4.066 0.000
trust_respectprivacy 0.612 0.138 4.418 0.000
scenario_type 0.169 0.230 0.736 0.462
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
plot_summs(mod2, scale = TRUE, plot.distributions = TRUE, inner_ci_level = .9)

Version Author Date
691dacd Lorenz-Spreen 2020-05-05

When accounting for other predictors, in particular perceived risk of harm and trust in government, and the perceived proportionality of the measure, the type of scenario has no additional effect.

Acceptance as a function of perceived severity of COVID. The models again target the two acceptance/uptake items in turn. The predictors are all the COVID-related items, including days in lockdown and job loss and so on.

mod3 <- glm(accept1 ~ COVID_sev_general + COVID_pers_harm + COVID_pers_concern + COVID_concern4others + COVID_positive_1 + COVID_positive_2 + COVID_ndays_lockdown_4 + COVID_lost_job + scenario_type, data = covfin, family = binomial)
summ(mod3,digits=3)
Observations 894 (121 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(9) 91.404
Pseudo-R² (Cragg-Uhler) 0.132
Pseudo-R² (McFadden) 0.076
AIC 1126.385
BIC 1174.343
Est. S.E. z val. p
(Intercept) -1.754 0.374 -4.686 0.000
COVID_sev_general 0.329 0.105 3.127 0.002
COVID_pers_harm 0.015 0.086 0.173 0.863
COVID_pers_concern 0.407 0.115 3.527 0.000
COVID_concern4others 0.035 0.089 0.390 0.697
COVID_positive_1Yes -1.197 0.806 -1.485 0.138
COVID_positive_2Yes 0.258 0.175 1.476 0.140
COVID_ndays_lockdown_4 0.015 0.005 2.937 0.003
COVID_lost_job 0.322 0.229 1.407 0.160
scenario_typesevere -0.523 0.146 -3.579 0.000
Standard errors: MLE
summ(mod3,digits=3,scale=TRUE)
Observations 894 (121 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(9) 91.404
Pseudo-R² (Cragg-Uhler) 0.132
Pseudo-R² (McFadden) 0.076
AIC 1126.385
BIC 1174.343
Est. S.E. z val. p
(Intercept) 0.671 0.116 5.772 0.000
COVID_sev_general 0.251 0.080 3.127 0.002
COVID_pers_harm 0.016 0.095 0.173 0.863
COVID_pers_concern 0.404 0.115 3.527 0.000
COVID_concern4others 0.038 0.097 0.390 0.697
COVID_positive_1Yes -1.197 0.806 -1.485 0.138
COVID_positive_2Yes 0.258 0.175 1.476 0.140
COVID_ndays_lockdown_4 0.226 0.077 2.937 0.003
COVID_lost_job 0.322 0.229 1.407 0.160
scenario_type -0.523 0.146 -3.579 0.000
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.

People are more likely to accept policies if they perceive greater potential for societal harm and higher personal concern. Because there was a marginal effect of scenario type, we next explore interactions.

mod4 <- glm(accept1 ~ COVID_sev_general + COVID_pers_harm + COVID_pers_concern + COVID_concern4others + COVID_positive_1 + COVID_positive_2 + 
              COVID_ndays_lockdown_4 + COVID_lost_job + scenario_type + scenario_type:COVID_sev_general + scenario_type:COVID_pers_concern, 
            data = covfin, family = binomial)
summ(mod4,digits=3)
Observations 894 (121 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(11) 93.802
Pseudo-R² (Cragg-Uhler) 0.135
Pseudo-R² (McFadden) 0.078
AIC 1127.987
BIC 1185.536
Est. S.E. z val. p
(Intercept) -2.302 0.558 -4.126 0.000
COVID_sev_general 0.426 0.155 2.743 0.006
COVID_pers_harm 0.020 0.086 0.235 0.814
COVID_pers_concern 0.512 0.152 3.356 0.001
COVID_concern4others 0.031 0.089 0.345 0.730
COVID_positive_1Yes -1.214 0.820 -1.481 0.139
COVID_positive_2Yes 0.248 0.175 1.420 0.156
COVID_ndays_lockdown_4 0.015 0.005 2.914 0.004
COVID_lost_job 0.301 0.229 1.314 0.189
scenario_typesevere 0.434 0.729 0.596 0.551
COVID_sev_general:scenario_typesevere -0.165 0.205 -0.808 0.419
COVID_pers_concern:scenario_typesevere -0.181 0.171 -1.058 0.290
Standard errors: MLE
summ(mod4,digits=3,scale=TRUE)
Observations 894 (121 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(11) 93.802
Pseudo-R² (Cragg-Uhler) 0.135
Pseudo-R² (McFadden) 0.078
AIC 1127.987
BIC 1185.536
Est. S.E. z val. p
(Intercept) 0.703 0.121 5.831 0.000
COVID_sev_general 0.325 0.118 2.743 0.006
COVID_pers_harm 0.022 0.095 0.235 0.814
COVID_pers_concern 0.508 0.151 3.356 0.001
COVID_concern4others 0.033 0.097 0.345 0.730
COVID_positive_1Yes -1.214 0.820 -1.481 0.139
COVID_positive_2Yes 0.248 0.175 1.420 0.156
COVID_ndays_lockdown_4 0.224 0.077 2.914 0.004
COVID_lost_job 0.301 0.229 1.314 0.189
scenario_type -0.558 0.149 -3.745 0.000
COVID_sev_general:scenario_type -0.126 0.156 -0.808 0.419
COVID_pers_concern:scenario_type -0.180 0.170 -1.058 0.290
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
plot_summs(mod4, scale = TRUE, plot.distributions = TRUE, inner_ci_level = .9)

Version Author Date
8a35dfc Lorenz-Spreen 2020-05-07
691dacd Lorenz-Spreen 2020-05-05
mod5 <- glm(accept2 ~ COVID_sev_general + COVID_pers_harm + COVID_pers_concern + COVID_concern4others + COVID_positive_1 + COVID_positive_2 + COVID_ndays_lockdown_4 + COVID_lost_job + scenario_type + scenario_type:COVID_sev_general + scenario_type:COVID_pers_concern, data = covfin, family = binomial)
summ(mod5,digits=3)
Observations 894 (121 missing obs. deleted)
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(11) 75.465
Pseudo-R² (Cragg-Uhler) 0.109
Pseudo-R² (McFadden) 0.062
AIC 1156.123
BIC 1213.671
Est. S.E. z val. p
(Intercept) -2.383 0.552 -4.319 0.000
COVID_sev_general 0.489 0.154 3.171 0.002
COVID_pers_harm 0.046 0.085 0.544 0.587
COVID_pers_concern 0.317 0.145 2.182 0.029
COVID_concern4others 0.100 0.089 1.127 0.260
COVID_positive_1Yes -0.839 0.810 -1.036 0.300
COVID_positive_2Yes 0.314 0.173 1.814 0.070
COVID_ndays_lockdown_4 0.009 0.005 1.758 0.079
COVID_lost_job 0.288 0.225 1.280 0.201
scenario_typesevere 0.494 0.720 0.687 0.492
COVID_sev_general:scenario_typesevere -0.129 0.204 -0.632 0.528
COVID_pers_concern:scenario_typesevere -0.254 0.162 -1.570 0.116
Standard errors: MLE
summ(mod5,digits=3,scale=TRUE)
Observations 894 (121 missing obs. deleted)
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(11) 75.465
Pseudo-R² (Cragg-Uhler) 0.109
Pseudo-R² (McFadden) 0.062
AIC 1156.123
BIC 1213.671
Est. S.E. z val. p
(Intercept) 0.593 0.117 5.078 0.000
COVID_sev_general 0.373 0.118 3.171 0.002
COVID_pers_harm 0.051 0.093 0.544 0.587
COVID_pers_concern 0.315 0.144 2.182 0.029
COVID_concern4others 0.108 0.096 1.127 0.260
COVID_positive_1Yes -0.839 0.810 -1.036 0.300
COVID_positive_2Yes 0.314 0.173 1.814 0.070
COVID_ndays_lockdown_4 0.132 0.075 1.758 0.079
COVID_lost_job 0.288 0.225 1.280 0.201
scenario_type -0.528 0.145 -3.637 0.000
COVID_sev_general:scenario_type -0.098 0.155 -0.632 0.528
COVID_pers_concern:scenario_type -0.252 0.160 -1.570 0.116
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
plot_summs(mod5, scale = TRUE, plot.distributions = TRUE, inner_ci_level = .9)

Version Author Date
8a35dfc Lorenz-Spreen 2020-05-07
691dacd Lorenz-Spreen 2020-05-05

Full model for acceptance. The final model (for now) combines all predictors including Worldview composite.

mod6 <- glm(accept1 ~ COVID_sev_general + COVID_pers_harm + COVID_pers_concern + COVID_concern4others + COVID_positive_1 + COVID_positive_2 + 
              COVID_ndays_lockdown_4 + COVID_lost_job + scenario_type + scenario_type:COVID_sev_general + scenario_type:COVID_pers_concern + 
              decline_participate + proportionality + sensitivity + risk_of_harm + trust_intentions + trust_respectprivacy +
              Worldview, data = covfin, family = binomial)
summ(mod6,digits=3)
Observations 893 (122 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(18) 465.466
Pseudo-R² (Cragg-Uhler) 0.550
Pseudo-R² (McFadden) 0.389
AIC 769.325
BIC 860.422
Est. S.E. z val. p
(Intercept) -3.364 1.038 -3.242 0.001
COVID_sev_general 0.157 0.208 0.756 0.450
COVID_pers_harm 0.025 0.111 0.223 0.824
COVID_pers_concern 0.659 0.180 3.659 0.000
COVID_concern4others -0.017 0.118 -0.141 0.888
COVID_positive_1Yes -1.650 1.054 -1.564 0.118
COVID_positive_2Yes 0.191 0.228 0.837 0.402
COVID_ndays_lockdown_4 0.013 0.007 2.049 0.040
COVID_lost_job 0.280 0.301 0.930 0.352
scenario_typesevere 0.899 1.021 0.880 0.379
decline_participate -0.034 0.078 -0.434 0.664
proportionality 0.433 0.084 5.161 0.000
sensitivity -0.159 0.087 -1.835 0.067
risk_of_harm -0.290 0.090 -3.227 0.001
trust_intentions 0.282 0.095 2.982 0.003
trust_respectprivacy 0.342 0.099 3.439 0.001
Worldview -0.120 0.106 -1.141 0.254
COVID_sev_general:scenario_typesevere -0.058 0.278 -0.209 0.835
COVID_pers_concern:scenario_typesevere -0.282 0.209 -1.348 0.178
Standard errors: MLE
summ(mod6,digits=3,scale=TRUE)
Observations 893 (122 missing obs. deleted)
Dependent variable accept1
Type Generalized linear model
Family binomial
Link logit
𝛘²(18) 465.466
Pseudo-R² (Cragg-Uhler) 0.550
Pseudo-R² (McFadden) 0.389
AIC 769.325
BIC 860.422
Est. S.E. z val. p
(Intercept) 0.560 0.174 3.213 0.001
COVID_sev_general 0.120 0.159 0.756 0.450
COVID_pers_harm 0.027 0.122 0.223 0.824
COVID_pers_concern 0.654 0.179 3.659 0.000
COVID_concern4others -0.018 0.128 -0.141 0.888
COVID_positive_1Yes -1.650 1.054 -1.564 0.118
COVID_positive_2Yes 0.191 0.228 0.837 0.402
COVID_ndays_lockdown_4 0.205 0.100 2.049 0.040
COVID_lost_job 0.280 0.301 0.930 0.352
scenario_type 0.066 0.258 0.255 0.799
decline_participate -0.058 0.134 -0.434 0.664
proportionality 0.675 0.131 5.161 0.000
sensitivity -0.215 0.117 -1.835 0.067
risk_of_harm -0.416 0.129 -3.227 0.001
trust_intentions 0.461 0.154 2.982 0.003
trust_respectprivacy 0.540 0.157 3.439 0.001
Worldview -0.115 0.101 -1.141 0.254
COVID_sev_general:scenario_type -0.044 0.212 -0.209 0.835
COVID_pers_concern:scenario_type -0.280 0.207 -1.348 0.178
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
plot_summs(mod6, scale = TRUE, plot.distributions = TRUE, inner_ci_level = .9)

Version Author Date
8a35dfc Lorenz-Spreen 2020-05-07
691dacd Lorenz-Spreen 2020-05-05
mod7 <- glm(accept2 ~ COVID_sev_general + COVID_pers_harm + COVID_pers_concern + COVID_concern4others + COVID_positive_1 + COVID_positive_2 + 
              COVID_ndays_lockdown_4 + COVID_lost_job + scenario_type + scenario_type:COVID_sev_general + scenario_type:COVID_pers_concern + 
              decline_participate + proportionality + sensitivity + risk_of_harm + trust_intentions + trust_respectprivacy +
              Worldview, data = covfin, family = binomial)
summ(mod7,digits=3)
Observations 893 (122 missing obs. deleted)
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(18) 499.503
Pseudo-R² (Cragg-Uhler) 0.578
Pseudo-R² (McFadden) 0.414
AIC 745.042
BIC 836.140
Est. S.E. z val. p
(Intercept) -4.148 1.062 -3.906 0.000
COVID_sev_general 0.319 0.211 1.507 0.132
COVID_pers_harm 0.057 0.113 0.509 0.611
COVID_pers_concern 0.435 0.179 2.440 0.015
COVID_concern4others 0.120 0.121 0.993 0.321
COVID_positive_1Yes -1.145 1.043 -1.098 0.272
COVID_positive_2Yes 0.365 0.236 1.543 0.123
COVID_ndays_lockdown_4 0.002 0.007 0.351 0.726
COVID_lost_job 0.313 0.307 1.019 0.308
scenario_typesevere 1.508 1.044 1.444 0.149
decline_participate -0.082 0.080 -1.023 0.306
proportionality 0.380 0.086 4.424 0.000
sensitivity -0.231 0.090 -2.570 0.010
risk_of_harm -0.320 0.091 -3.512 0.000
trust_intentions 0.335 0.096 3.508 0.000
trust_respectprivacy 0.434 0.101 4.309 0.000
Worldview -0.008 0.108 -0.073 0.942
COVID_sev_general:scenario_typesevere -0.033 0.284 -0.117 0.907
COVID_pers_concern:scenario_typesevere -0.502 0.209 -2.405 0.016
Standard errors: MLE
summ(mod7,digits=3,scale=TRUE)
Observations 893 (122 missing obs. deleted)
Dependent variable accept2
Type Generalized linear model
Family binomial
Link logit
𝛘²(18) 499.503
Pseudo-R² (Cragg-Uhler) 0.578
Pseudo-R² (McFadden) 0.414
AIC 745.042
BIC 836.140
Est. S.E. z val. p
(Intercept) 0.340 0.176 1.928 0.054
COVID_sev_general 0.243 0.161 1.507 0.132
COVID_pers_harm 0.063 0.124 0.509 0.611
COVID_pers_concern 0.432 0.177 2.440 0.015
COVID_concern4others 0.130 0.131 0.993 0.321
COVID_positive_1Yes -1.145 1.043 -1.098 0.272
COVID_positive_2Yes 0.365 0.236 1.543 0.123
COVID_ndays_lockdown_4 0.035 0.100 0.351 0.726
COVID_lost_job 0.313 0.307 1.019 0.308
scenario_type 0.272 0.263 1.036 0.300
decline_participate -0.140 0.137 -1.023 0.306
proportionality 0.593 0.134 4.424 0.000
sensitivity -0.312 0.121 -2.570 0.010
risk_of_harm -0.458 0.130 -3.512 0.000
trust_intentions 0.547 0.156 3.508 0.000
trust_respectprivacy 0.684 0.159 4.309 0.000
Worldview -0.008 0.103 -0.073 0.942
COVID_sev_general:scenario_type -0.025 0.217 -0.117 0.907
COVID_pers_concern:scenario_type -0.498 0.207 -2.405 0.016
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d.
plot_summs(mod7, scale = TRUE, plot.distributions = TRUE, inner_ci_level = .9)

Version Author Date
8a35dfc Lorenz-Spreen 2020-05-07
691dacd Lorenz-Spreen 2020-05-05

sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Mojave 10.14.6

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] broom.mixed_0.2.5  kableExtra_1.1.0   jtools_2.0.5       expss_0.10.2      
 [5] vioplot_0.3.4      zoo_1.8-8          sm_2.2-5.6         readxl_1.3.1      
 [9] workflowr_1.6.2    summarytools_0.9.6 scales_1.1.0       psych_1.9.12.31   
[13] reshape2_1.4.4     Hmisc_4.4-0        Formula_1.2-3      survival_3.1-12   
[17] gridExtra_2.3      lme4_1.1-23        Matrix_1.2-18      forcats_0.5.0     
[21] stringr_1.4.0      dplyr_0.8.5        purrr_0.3.4        readr_1.3.1       
[25] tidyr_1.0.2        tibble_3.0.1       ggplot2_3.3.0      tidyverse_1.3.0   
[29] stargazer_5.2.2    hexbin_1.28.1      lattice_0.20-41   

loaded via a namespace (and not attached):
 [1] minqa_1.2.4         colorspace_1.4-1    pryr_0.1.4         
 [4] ellipsis_0.3.0      rprojroot_1.3-2     ggstance_0.3.4     
 [7] htmlTable_1.13.3    base64enc_0.1-3     fs_1.4.1           
[10] rstudioapi_0.11     farver_2.0.3        fansi_0.4.1        
[13] lubridate_1.7.8     xml2_1.3.2          codetools_0.2-16   
[16] splines_4.0.0       mnormt_1.5-7        knitr_1.28         
[19] jsonlite_1.6.1      nloptr_1.2.2.1      broom_0.5.6        
[22] cluster_2.1.0       dbplyr_1.4.3        png_0.1-7          
[25] compiler_4.0.0      httr_1.4.1          backports_1.1.6    
[28] assertthat_0.2.1    cli_2.0.2           later_1.0.0        
[31] acepack_1.4.1       htmltools_0.4.0     tools_4.0.0        
[34] coda_0.19-3         gtable_0.3.0        glue_1.4.0         
[37] Rcpp_1.0.4.6        cellranger_1.1.0    vctrs_0.2.4        
[40] nlme_3.1-147        xfun_0.13           rvest_0.3.5        
[43] lifecycle_0.2.0     statmod_1.4.34      MASS_7.3-51.5      
[46] hms_0.5.3           promises_1.1.0      parallel_4.0.0     
[49] TMB_1.7.16          RColorBrewer_1.1-2  yaml_2.2.1         
[52] pander_0.6.3        rpart_4.1-15        latticeExtra_0.6-29
[55] stringi_1.4.6       checkmate_2.0.0     boot_1.3-24        
[58] rlang_0.4.6         pkgconfig_2.0.3     matrixStats_0.56.0 
[61] evaluate_0.14       labeling_0.3        rapportools_1.0    
[64] htmlwidgets_1.5.1   tidyselect_1.0.0    plyr_1.8.6         
[67] magrittr_1.5        R6_2.4.1            magick_2.3         
[70] generics_0.0.2      DBI_1.1.0           mgcv_1.8-31        
[73] pillar_1.4.3        haven_2.2.0         whisker_0.4        
[76] foreign_0.8-78      withr_2.2.0         nnet_7.3-13        
[79] modelr_0.1.7        crayon_1.3.4        rmarkdown_2.1      
[82] jpeg_0.1-8.1        grid_4.0.0          data.table_1.12.8  
[85] git2r_0.27.1        webshot_0.5.2       reprex_0.3.0       
[88] digest_0.6.25       httpuv_1.5.2        munsell_0.5.0      
[91] viridisLite_0.3.0   tcltk_4.0.0